﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using Business_Layer;
using Data_Access_Layer;

namespace CaffeBillard
{
    public partial class SupplierForm : DevComponents.DotNetBar.Office2007Form
    {
        public SupplierForm()
        {
            InitializeComponent();
            //Ẩn đi các cột không cần thiết của datagridview
            dgvSup.AutoGenerateColumns = false;
        }

      


        #region Khai báo ở đây

        //
          private bool _curr;
        private SuppilerManager _manager;

        //Thuộc tính kiểm tra xem checkbox đã được tick hết chưa
        private bool _selectall = false;
        #endregion

        #region Các phương thức liên quan ở đây
        
        //Load danh sách nhà cung cấp
        private void LoadSup()
        {
            dgvSup.DataSource = new BindingSource {DataSource = _manager.GetAll()};
        }
        #endregion

        #region Các sự kiện trên form ở đây
        
        
        //Load form
        private void SupplierForm_Load(object sender, EventArgs e)
        {
            _manager = new SuppilerManager();
            //Hiển thị danh sách nhà cung cấp
            LoadSup();
        }

        //Lúc nhấn phím enter hoặc chuyển qua dòng mới thì thêm hoặc update
        private void dgvSup_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
            
            if(_curr)
            {
                try
                {
                    //Lấy dòng hiện tại
                    var _cur = dgvSup.Rows[e.RowIndex];

                    //Tạo một đối tượng Supplier mới
                    Supplier sup= new Supplier();

                    //Gán các giá trị cho các thuộc tính tương ứng trên datagridview
                   sup.Id =Convert.ToInt32( _cur.Cells[1].Value.ToString());
                    sup.SupName = _cur.Cells[2].Value.ToString();
                    sup.Phone = _cur.Cells[3].Value.ToString();
                    sup.Address = _cur.Cells[4].Value.ToString();
                    sup.Deleted = false;
                    //Gọi phương thức thêm hoặc cập nhật từ lớp suppliermanager
                    _manager.InsertOrUpdate(sup);
                    //Nếu xảy ra lỗi thì thông báo lỗi
                    if(_manager._err!="")
                        MessageBox.Show(_manager._err, "Thông báo", MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning);
                    LoadSup();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Lỗi hệ thống \n" + ex.Message, "Thông báo", MessageBoxButtons.OK,
                                     MessageBoxIcon.Warning);
                }
            }
            //Gán lại giá trị cho _curr
            _curr = false;
        }

        //Kiểm tra dữ liệu nhập vào
        private void dgvSup_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            try
            {
                if (dgvSup.IsCurrentRowDirty && e.ColumnIndex > 0)
                {


                    var _curren = dgvSup.Rows[e.RowIndex];
                    if (_curren.Cells[2].Value == null || _curren.Cells[4].Value == null)
                    {
                        MessageBox.Show("Không được để trống dữ liệu!", "Thông báo", MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning);
                        e.Cancel = true;
                    }
                    else if (!Phone(_curren.Cells[3].Value.ToString()))
                    {
                        MessageBox.Show("Số điện thoại không đúng định dạng!", "Thông báo", MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning);
                        e.Cancel = true;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi hệ thống \n"+ex.Message, "Thông báo", MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning);

            }
            _curr = dgvSup.IsCurrentRowDirty;
        }


        #endregion

        #region Các hàm bổ trợ ở đây
        //Kiểm tra số điện thoại
        public bool Phone(string s)
        {
            string pattern = @"0\d{9,10}";
            if (Regex.IsMatch(s, pattern))
                return true;
            else
            {
                return false;
            }
        }

        #endregion


        //Xóa nhà cung cấp
        private void btnXoa_Click(object sender, EventArgs e)
        {
            //Lấy những dòng được chọn
            var selectedRows = dgvSup.Rows.Cast<DataGridViewRow>()
                    .Where(x => x.Cells[0].Value != null && x.Cells[1].Value != null && (bool)x.Cells[0].Value)
                    .ToList();
            //Nếu không có dòng nào được chọn thì thông báo cho người dùng chọn lại
            if (selectedRows.Count == 0)
            {
                MessageBox.Show("Bạn chưa chọn nhà cung cấp nào để xóa", "Thông báo",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            //Yêu cầu người dùng xác nhận việc xóa
            if (MessageBox.Show("Tất cả các nhà cung cấp sẽ được xóa bỏ, bạn có chắc muốn xóa không?", "Cảnh báo !!!", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //Duyệt qua từng dòng được chọn
                for (int i = selectedRows.Count - 1; i >= 0; i--)
                {
                    // Lấy ra nhà cung cấp được chọn
                    var sup = selectedRows[i].DataBoundItem as Supplier;
                    sup.Id = int.Parse(selectedRows[i].Cells[1].Value.ToString());
                    sup.Deleted = true;
                    _manager.Delete(sup);
                }
                //Load lại danh sách nhà cung cấp
                LoadSup();
            }

        }

        //Sự kiện viết trong textbox tìm kiếm
        private void txtTim_TextChanged(object sender, EventArgs e)
        {
            //Nếu chưa nhập gì thì load danh sách
            if(txtTim.Text=="")
                LoadSup();
            else
            {
                //Tiến hành tìm kiếm theo từ khóa đã nhập
                dgvSup.DataSource = new BindingSource { DataSource = _manager.Find(txtTim.Text,0) };
            }
            
        }

        //Nếu checkbox tim được check thì cho hiển thị ô nhập khóa tìm kiếm và ngược lại
        private void chkTim_CheckedChanged(object sender, EventArgs e)
        {
            if(chkTim.Checked)
                txtTim.Enabled = true;
            else
            {
                txtTim.Enabled = false;
            }
        }

        //Tìm kiếm theo các kiểu đã chọn 
        private void textBoxX1_TextChanged(object sender, EventArgs e)
        {
           
          if(rdMa.Checked)
                    dgvSup.DataSource = new BindingSource { DataSource = _manager.Find(txtTim1.Text, 1) };
          else if(rdTen.Checked)
                    dgvSup.DataSource = new BindingSource { DataSource = _manager.Find(txtTim1.Text, 2) };
          else if(rdDT.Checked)
                    dgvSup.DataSource = new BindingSource { DataSource = _manager.Find(txtTim1.Text, 3) };
          else
                    dgvSup.DataSource = new BindingSource { DataSource = _manager.Find(txtTim1.Text, 4) };
                 
            
        }

      

        private void dgvSup_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if(e.RowIndex==-1)
            {
                if(e.ColumnIndex==0)
                {
                    
                        if (_selectall)
                        {
                            for (int i = 0; i < dgvSup.Rows.Count; i++)
                            {
                                dgvSup.Rows[i].Cells[0].Value = false;
                                _selectall = false;
                            }
                        }
                        else
                        {
                            for (int i = 0; i < dgvSup.Rows.Count; i++)
                            {
                                dgvSup.Rows[i].Cells[0].Value = true;
                                _selectall = true;
                            }
                        }
                    }
                }
            }
        


    }
}
